React Lazy Loading: ์ต์ ํ๋ ์ฑ๋ฅ์ ์ํ ์ปดํฌ๋ํธ ์ฝ๋ ๋ถํ | MLOG | MLOG 2025๋
8์ 16์ผ ํ๊ตญ์ด
Lazy loading ๋ฐ ์ปดํฌ๋ํธ ์ฝ๋ ๋ถํ ์ ํตํด React ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ๋จ์ถํ๊ณ ์ฑ๋ฅ์ ๊ฐ์ ํ์ธ์. ์ค์ฉ์ ์ธ ๊ธฐ์ ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐฐ์ธ ์ ์์ต๋๋ค.
React Lazy Loading: ์ต์ ํ๋ ์ฑ๋ฅ์ ์ํ ์ปดํฌ๋ํธ ์ฝ๋ ๋ถํ
์ค๋๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ๋์งํธ ์ธ๊ณ์์ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฌ์ฉ์๋ ์ฆ๊ฐ์ ์ธ ๋ง์กฑ์ ๊ธฐ๋ํ๋ฉฐ, ๋๋ฆฐ ๋ก๋ฉ ์๊ฐ์ ๋ถ๋ง, ์ฅ๋ฐ๊ตฌ๋ ํฌ๊ธฐ, ๋ถ์ ์ ์ธ ๋ธ๋๋ ์ด๋ฏธ์ง๋ก ์ด์ด์ง ์ ์์ต๋๋ค. React ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ, ์ํํ๊ณ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด ์ฑ๋ฅ์ ์ต์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๊ธฐ์ ์ค ํ๋๋ ์ปดํฌ๋ํธ ์ฝ๋ ๋ถํ ์ ์ฌ์ฉํ lazy loading ์
๋๋ค.
Lazy Loading ๋ฐ ์ฝ๋ ๋ถํ ์ด๋ ๋ฌด์์
๋๊น?
Lazy loading ์ ์ด๋ฏธ์ง, ์คํฌ๋ฆฝํธ ๋ฐ ์ปดํฌ๋ํธ์ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์ด๊ธฐ ํ์ด์ง ๋ก๋ ์ค์ ํ ๋ฒ์ ๋ชจ๋ ๋ก๋ํ๋ ๋์ ํ์ํ ๋๋ง ๋ก๋ํ๋ ๊ธฐ์ ์
๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด๊ธฐ์ ๋ค์ด๋ก๋ํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํด์ผ ํ๋ ๋ฐ์ดํฐ ์์ด ํฌ๊ฒ ์ค์ด๋ค์ด ์ด๊ธฐ ๋ก๋ ์๊ฐ์ด ๋นจ๋ผ์ง๊ณ ์ธ์ง๋ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
์ฝ๋ ๋ถํ ์ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๋ฅผ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฒญํฌ(๋๋ ๋ฒ๋ค)๋ก ๋๋๋ ํ๋ก์ธ์ค์
๋๋ค. ์ด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๋ ์ด๊ธฐ ๋ณด๊ธฐ์ ํ์ํ ์ฝ๋๋ง ๋ค์ด๋ก๋ํ๊ณ ์ค์ ๋ก ํ์ํ ๋๊น์ง ๋ค๋ฅธ ์ฝ๋์ ๋ก๋ฉ์ ์ฐ๊ธฐํ ์ ์์ต๋๋ค. Lazy loading์ ์ฝ๋ ๋ถํ ์ ํ์ฉํ์ฌ ํน์ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋๋ ค๊ณ ํ ๋๋ง ๋ก๋ํฉ๋๋ค.
React์์ Lazy Loading ๋ฐ ์ฝ๋ ๋ถํ ์ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
React ํ๋ก์ ํธ์ lazy loading ๋ฐ ์ฝ๋ ๋ถํ ์ ํตํฉํ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํฅ์๋ ์ด๊ธฐ ๋ก๋ ์๊ฐ: ํ์ ์ปดํฌ๋ํธ๋ง ์ด๊ธฐ์ ๋ก๋ํ์ฌ ํ์ด์ง๊ฐ ์ํธ ์์ฉ ๊ฐ๋ฅํด์ง๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค. ์ด๋ ์ธํฐ๋ท ์ฐ๊ฒฐ ์๋๊ฐ ๋๋ฆฌ๊ฑฐ๋ ๋ชจ๋ฐ์ผ ์ฅ์น๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์์๊ฒ ํนํ ์ ์ฉํฉ๋๋ค.
์ค์ด๋ ๋ฒ๋ค ํฌ๊ธฐ: ์ฝ๋ ๋ถํ ์ ์ด๊ธฐ JavaScript ๋ฒ๋ค์ ํฌ๊ธฐ๋ฅผ ์ค์ฌ ๋ค์ด๋ก๋ ๋ฐ ๊ตฌ๋ฌธ ๋ถ์ ์๊ฐ์ ๋จ์ถํฉ๋๋ค.
ํฅ์๋ ์ฌ์ฉ์ ๊ฒฝํ: ๋ ๋น ๋ฅธ ๋ก๋ฉ ์น์ฌ์ดํธ๋ ๋ ์ํํ๊ณ ์ฆ๊ฑฐ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ์ฌ ์ฐธ์ฌ๋์ ์ ํ์จ์ ๋์
๋๋ค.
์ ์ฌ์ ์ฅ์น์์์ ๋ ๋์ ์ฑ๋ฅ: Lazy loading์ ์ ํ๋ ์ฒ๋ฆฌ ๋ฅ๋ ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง ์ฅ์น์์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฏธ๋ฆฌ ๋ก๋ํ๊ณ ์ฒ๋ฆฌํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
SEO ์ด์ : ๊ฒ์ ์์ง์ ๋ก๋ฉ ์๊ฐ์ด ๋ ๋น ๋ฅธ ์น์ฌ์ดํธ๋ฅผ ์ฐ์ ์ํ๋ฏ๋ก lazy loading์ ๊ตฌํํ๋ฉด ๊ฒ์ ์์ง ์์์ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
React์์ Lazy Loading์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
React๋ React.lazy
๋ฐ Suspense
์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ lazy loading์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํฉ๋๋ค. ๋ค์์ ๋จ๊ณ๋ณ ๊ฐ์ด๋์
๋๋ค.
1. React.lazy() ์ฌ์ฉ
React.lazy()
๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ๋์ ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฏ๋ก ์ฝ๋๋ฅผ ๋ณ๋์ ์ฒญํฌ๋ก ํจ๊ณผ์ ์ผ๋ก ๋ถํ ํ ์ ์์ต๋๋ค. import()
๋ฅผ ํธ์ถํ๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ด ํจ์๋ ์ปดํฌ๋ํธ๋ก ํ์ธ๋๋ Promise๋ฅผ ๋ฐํํฉ๋๋ค.
const MyComponent = React.lazy(() => import('./MyComponent'));
์ด ์์์ MyComponent
๋ ๋ ๋๋ง๋๋ ค๊ณ ํ ๋๋ง ๋ก๋๋ฉ๋๋ค.
2. <Suspense>๋ก ๋ํ
React.lazy()
๋ ๋น๋๊ธฐ์ ์ธ ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก lazy-loaded ์ปดํฌ๋ํธ๋ฅผ <Suspense>
์ปดํฌ๋ํธ๋ก ๋ํํด์ผ ํฉ๋๋ค. <Suspense>
์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ก๋๋๋ ๋์ ํด๋ฐฑ UI(์: ๋ก๋ฉ ์คํผ๋)๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
import React, { Suspense } from 'react';
function MyPage() {
return (
Loading...
}>
);
}
์ด ์์์ MyComponent
๊ฐ ๋ก๋๋๋ ๋์ Loading...
๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. ์ปดํฌ๋ํธ๊ฐ ๋ก๋๋๋ฉด ํด๋ฐฑ UI๋ฅผ ๋์ฒดํฉ๋๋ค.
3. ์ค์ฉ์ ์ธ ์: ๋์ฉ๋ ์ด๋ฏธ์ง ๊ฐค๋ฌ๋ฆฌ Lazy Loading
๋์ฉ๋ ์ด๋ฏธ์ง ๊ฐค๋ฌ๋ฆฌ๊ฐ ์๋ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํด ๋ณด๊ฒ ์ต๋๋ค. ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ํ ๋ฒ์ ๋ก๋ํ๋ฉด ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๋ค์์ React.lazy()
๋ฐ <Suspense>
๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ lazy loadingํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
import React, { Suspense } from 'react';
const LazyImage = React.lazy(() => import('./Image'));
function ImageGallery() {
const images = [
{ id: 1, src: 'image1.jpg', alt: 'Image 1' },
{ id: 2, src: 'image2.jpg', alt: 'Image 2' },
{ id: 3, src: 'image3.jpg', alt: 'Image 3' },
// ... more images
];
return (
{images.map(image => (
Loading image...
}>
))}
);
}
export default ImageGallery;
๊ทธ๋ฆฌ๊ณ Image.js
์ปดํฌ๋ํธ:
import React from 'react';
const Image = ({ src, alt }) => {
return ;
};
export default Image;
์ด ์์์ ๊ฐ ์ด๋ฏธ์ง๋ <Suspense>
์ปดํฌ๋ํธ๋ก ๋ํ๋๋ฏ๋ก ๊ฐ ์ด๋ฏธ์ง๊ฐ ๋ก๋๋๋ ๋์ ๋ก๋ฉ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด๋ฏธ์ง๊ฐ ๋ค์ด๋ก๋๋๋ ๋์ ์ ์ฒด ํ์ด์ง๊ฐ ์ฐจ๋จ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๊ณ ๊ธ ๊ธฐ์ ๋ฐ ๊ณ ๋ ค ์ฌํญ
1. ์ค๋ฅ ๊ฒฝ๊ณ
Lazy loading์ ์ฌ์ฉํ ๋๋ ๋ก๋ฉ ํ๋ก์ธ์ค ์ค์ ๋ฐ์ํ ์ ์๋ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ค๋ฅ ๊ฒฝ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๊ณ ํด๋ฐฑ UI๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ค๋ฅ ๊ฒฝ๊ณ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
import React, { Component } from 'react';
class ErrorBoundary extends Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
// Update state so the next render will show the fallback UI.
return { hasError: true };
}
componentDidCatch(error, errorInfo) {
// You can also log the error to an error reporting service
console.error(error, errorInfo);
}
render() {
if (this.state.hasError) {
// You can render any custom fallback UI
return Something went wrong. ;
}
return this.props.children;
}
}
export default ErrorBoundary;
๊ทธ๋ฐ ๋ค์ <Suspense>
์ปดํฌ๋ํธ๋ฅผ <ErrorBoundary>
๋ก ๋ํํฉ๋๋ค.
Loading...}>
MyComponent
๋ฅผ ๋ก๋ํ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด <ErrorBoundary>
๊ฐ ์ด๋ฅผ ํฌ์ฐฉํ๊ณ ํด๋ฐฑ UI๋ฅผ ํ์ํฉ๋๋ค.
2. ์๋ฒ์ธก ๋ ๋๋ง(SSR) ๋ฐ Lazy Loading
Lazy loading์ ์๋ฒ์ธก ๋ ๋๋ง(SSR)๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ๊ฐ์ ํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ช ๊ฐ์ง ์ถ๊ฐ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค. ์๋ฒ๊ฐ ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ lazy-loaded ์ปดํฌ๋ํธ๊ฐ ํด๋ผ์ด์ธํธ์ธก์์ ์ ์ ํ๊ฒ ํ์ด๋๋ ์ด์
๋๋๋ก ํด์ผ ํฉ๋๋ค.
Next.js ๋ฐ Gatsby.js์ ๊ฐ์ ๋๊ตฌ๋ SSR ํ๊ฒฝ์์ lazy loading ๋ฐ ์ฝ๋ ๋ถํ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฏ๋ก ํ๋ก์ธ์ค๊ฐ ํจ์ฌ ์ฌ์์ง๋๋ค.
3. Lazy-Loaded ์ปดํฌ๋ํธ ๋ฏธ๋ฆฌ ๋ก๋
๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ค์ ๋ก ํ์ํ๊ธฐ ์ ์ lazy-loaded ์ปดํฌ๋ํธ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ ์ ์์ต๋๋ค. ์ด๋ ๊ณง ๋ ๋๋ง๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ปดํฌ๋ํธ(์: ํด๋ ์๋์ ์์ง๋ง ์คํฌ๋กค๋์ด ๋ณผ ์ ์์ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ปดํฌ๋ํธ)์ ์ ์ฉํ ์ ์์ต๋๋ค. import()
ํจ์๋ฅผ ์๋์ผ๋ก ํธ์ถํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ ์ ์์ต๋๋ค.
import('./MyComponent'); // MyComponent ๋ฏธ๋ฆฌ ๋ก๋
์ด๋ ๊ฒ ํ๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ปดํฌ๋ํธ ๋ก๋ฉ์ด ์์๋๋ฏ๋ก ์ค์ ๋ก ๋ ๋๋ง๋ ๋ ๋ ๋นจ๋ฆฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
4. Webpack Magic Comments๋ฅผ ์ฌ์ฉํ ๋์ ๊ฐ์ ธ์ค๊ธฐ
Webpack์ "magic comments"๋ ์์ฑ๋ ์ฝ๋ ์ฒญํฌ์ ์ด๋ฆ์ ์ฌ์ฉ์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฒ๋ค ๊ตฌ์กฐ๋ฅผ ๋๋ฒ๊น
ํ๊ณ ๋ถ์ํ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
const MyComponent = React.lazy(() => import(/* webpackChunkName: "my-component" */ './MyComponent'));
์ด๋ ๊ฒ ํ๋ฉด ์ผ๋ฐ์ ์ธ ์ด๋ฆ ๋์ "my-component.js"(๋๋ ์ ์ฌํ)๋ผ๋ ์ฝ๋ ์ฒญํฌ๊ฐ ์์ฑ๋ฉ๋๋ค.
5. ์ผ๋ฐ์ ์ธ ํจ์ ํผํ๊ธฐ
๊ณผ๋ํ ๋ถํ : ์ฝ๋๋ฅผ ๋๋ฌด ์์ ์ฒญํฌ๋ก ๋ถํ ํ๋ฉด ์ฌ๋ฌ ๋คํธ์ํฌ ์์ฒญ์ ๋ง๋๋ ์ค๋ฒํค๋๋ก ์ธํด ์ค์ ๋ก ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ ์ ํฉํ ๊ท ํ์ ์ฐพ์ผ์ญ์์ค.
์๋ชป๋ Suspense ๋ฐฐ์น: <Suspense>
๊ฒฝ๊ณ๊ฐ ์ข์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋๋ก ์ ์ ํ๊ฒ ๋ฐฐ์น๋์๋์ง ํ์ธํฉ๋๋ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ ์ฒด ํ์ด์ง๋ฅผ <Suspense>
๋ก ๋ํํ์ง ๋ง์ญ์์ค.
์ค๋ฅ ๊ฒฝ๊ณ ์์ง ์๊ธฐ: lazy loading ์ค์ ๋ฐ์ํ ์ ์๋ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด ํญ์ ์ค๋ฅ ๊ฒฝ๊ณ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
์ค์ ์ฌ๋ก ๋ฐ ์ฌ์ฉ ์ฌ๋ก
Lazy loading์ React ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ด๋ฒ์ํ ์๋๋ฆฌ์ค์ ์ ์ฉํ ์ ์์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์์
๋๋ค.
์ ์ ์๊ฑฐ๋ ์น์ฌ์ดํธ: ์ ํ ์ด๋ฏธ์ง, ๋น๋์ค ๋ฐ ์์ธํ ์ ํ ์ค๋ช
์ lazy loadingํ๋ฉด ์ ํ ํ์ด์ง์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ํฌ๊ฒ ๊ฐ์ ํ ์ ์์ต๋๋ค.
๋ธ๋ก๊ทธ ๋ฐ ๋ด์ค ์น์ฌ์ดํธ: ์ด๋ฏธ์ง, ์๋ฒ ๋๋ ๋น๋์ค ๋ฐ ๋๊ธ ์น์
์ lazy loadingํ๋ฉด ์ฝ๊ธฐ ํ๊ฒฝ์ ๊ฐ์ ํ๊ณ ์ดํ๋ฅ ์ ์ค์ผ ์ ์์ต๋๋ค.
๋์๋ณด๋ ๋ฐ ๊ด๋ฆฌ์ ํจ๋: ๋ณต์กํ ์ฐจํธ, ๊ทธ๋ํ ๋ฐ ๋ฐ์ดํฐ ํ
์ด๋ธ์ lazy loadingํ๋ฉด ๋์๋ณด๋ ๋ฐ ๊ด๋ฆฌ์ ํจ๋์ ์๋ต์ฑ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
(SPA): ๊ฒฝ๋ก ๋ฐ ์ปดํฌ๋ํธ๋ฅผ lazy loadingํ๋ฉด SPA์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ด๊ณ ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
๊ตญ์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์
: ์ฌ์ฉ์ ์ธ์ด์ ํ์ํ ๊ฒฝ์ฐ์๋ง ๋ก์ผ์ผ๋ณ ๋ฆฌ์์ค(ํ
์คํธ, ์ด๋ฏธ์ง ๋ฑ)๋ฅผ ๋ก๋ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋
์ผ ์ฌ์ฉ์์ ๊ฒฝ์ฐ ๋
์ผ์ด ๋ฒ์ญ์ ๋ก๋ํ๊ณ ์คํ์ธ ์ฌ์ฉ์์ ๊ฒฝ์ฐ ์คํ์ธ์ด ๋ฒ์ญ์ ๋ก๋ํฉ๋๋ค.
์: ๊ตญ์ ์ ์ ์๊ฑฐ๋ ์น์ฌ์ดํธ
์ ์ธ๊ณ์ ์ ํ์ ํ๋งคํ๋ ์ ์ ์๊ฑฐ๋ ์น์ฌ์ดํธ๋ฅผ ์์ํด ๋ณด์ญ์์ค. ๊ตญ๊ฐ๋ง๋ค ํตํ, ์ธ์ด ๋ฐ ์ ํ ์นดํ๋ก๊ทธ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ตญ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ๋ ๋์ lazy loading์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋๋ง ์ฌ์ฉ์ ์์น์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค.
const CurrencyFormatter = React.lazy(() => import(`./CurrencyFormatter/${userCountry}`))
const ProductCatalog = React.lazy(() => import(`./ProductCatalog/${userCountry}`))
function ECommerceSite() {
const userCountry = getUserCountry(); // ์ฌ์ฉ์์ ๊ตญ๊ฐ๋ฅผ ๊ฒฐ์ ํ๋ ํจ์
return (
Loading content for your region...}>
);
}
๊ฒฐ๋ก
Lazy loading ๋ฐ ์ปดํฌ๋ํธ ์ฝ๋ ๋ถํ ์ React ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๊ธฐ์ ์
๋๋ค. ์ปดํฌ๋ํธ๋ฅผ ํ์ํ ๋๋ง ๋ก๋ํ๋ฉด ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ํฌ๊ฒ ์ค์ด๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ฉฐ SEO๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค. React์ ๊ธฐ๋ณธ ์ ๊ณต React.lazy()
๋ฐ <Suspense>
์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ ํธ์์ lazy loading์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ๋ ๋น ๋ฅด๊ณ ์๋ต์ฑ์ด ๋ฐ์ด๋๊ณ ๋งค๋ ฅ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ์ญ์์ค.
lazy loading์ ๊ตฌํํ ๋๋ ํญ์ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ณ ๋ คํ์ญ์์ค. ์ ์ฉํ ํด๋ฐฑ UI๋ฅผ ์ ๊ณตํ๊ณ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ฑ๋ฅ์ ์ ์คํ๊ฒ ๋ถ์ํ์ฌ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ณ ์๋์ง ํ์ธํ์ญ์์ค. ๋ค์ํ ์ ๊ทผ ๋ฐฉ์์ ์คํํ๊ณ ํน์ ์๊ตฌ ์ฌํญ์ ๊ฐ์ฅ ์ ํฉํ ์๋ฃจ์
์ ์ฐพ๋ ๊ฒ์ ๋๋ ค์ํ์ง ๋ง์ญ์์ค.